package com.zpark.jushanpay.common.util;

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;

/**
 * 文件上传和下载的工具类
 */
@Slf4j
public class QiniuUtils implements Serializable {

    /**
     * 文件上传方法
     * @param ak AccessKey 公钥
     * @param sk SecretKey 私钥
     * @param bucket 存储空间名字
     * @param data 文件的二进制数据
     * @param fileName 文件的名字
     * @return 文件的标识
     */
    public static String upload(String ak, String sk, String bucket, byte[] data, String fileName){
        //构造一个带指定Region对象的配置类
        Configuration cfg = new Configuration(Region.huanan());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
        //默认不指定key的情况下，以文件内容的hash值作为文件名，这里建议由自己来控制文件名
        String key = fileName;
        //通常这里得到文件的字节数组
        Auth auth = Auth.create(ak, sk);
        // 获取上传token
        String upToken = auth.uploadToken(bucket);
        try{
            // 上传文件
            Response response = uploadManager.put(data, key, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);

            System.out.println(putRet.key);
            System.out.println(putRet.hash);

            return putRet.key;
        }catch(QiniuException ex){
            Response r = ex.response;
            log.error(r.toString());
            try{
                log.error(r.bodyString());
            }catch(QiniuException e){
                e.printStackTrace();
            }
            throw new RuntimeException(r.toString());
        }
    }

    // 文件下载方法
}
